/*****************************************
**  Nom : RASPAUD - COLLOMB				**
**	Nom du fichier : InitPartie.h		**
**	Description : 						**
**										**
**										**
**	Date : 19/08/2014				    **
**  Statut : Release					**
*****************************************/

/*****************************************
**  Zone de declaration des includes    **
*****************************************/

/*****************************************
**  Zone de declaration des constantes  **
*****************************************/

/*****************************************
**  Zone de declaration des structures  **
*****************************************/

/************************************************
**  Zone de declaration des Prototypes PUBLIC  **
*************************************************/

/*************************************************************************
**  [Fonction InitPartie_InitCarte]        		    					**
**  Création d'une carte										        **
**																		**
**	Entrees : int valeur - Valeur des cartes	                        **
**			: int signe - Signe des cartes								**
**																		**
**	Sorties : S_CARTE													**
**				Description de la carte créée                           **
**										                                **
**************************************************************************/
S_CARTE* InitPartie_InitCarte(int valeur, int signe);

/*************************************************************************
**  [Fonction InitPartie_InitPaquet]       		    					**
**  Création d'un paquet 										        **
**																		**
**	Entrees : FIFO_PAQUET paquet - La FIFO "table"	      	            **
**																		**
**																		**
**	Sorties : FIFO_PAQUET												**
**				Description d'un paquet de carte                        **
**										                                **
**************************************************************************/

int InitPartie_InitPaquet(FIFO_PAQUET *paquet);

/*************************************************************************
**  [Fonction InitPartie_InitFIFO]       		    					**
**  Création et initialisation d'une FIFO correspondant a un joueur     **
**																		**
**	Entrees : int *nom_joueur - Identification d'un joueur via un numero**
**																		**
**																		**
**	Sorties : FIFO_PAQUET												**
**				Description d'un joueur avec ses cartes                 **
**										                                **
**************************************************************************/

FIFO_PAQUET InitPartie_InitFIFO(int nom_joueur);

/*************************************************************************
**  InitPartie_InitPartie			                		    					**
**  Description de la fonction	:initialise tous les 
	paquets de cartes 													**
**																		**
**	Entrees : FIFO_PAQUET --> FIFO du paquet "table" 					**
**			  FIFO_PAQUET --> FIFO du paquet "J1" 	
			  FIFO_PAQUET --> FIFO du paquet "J2" 
			  FIFO_PAQUET --> FIFO du paquet "J3" 
			  FIFO_PAQUET --> FIFO du paquet "J4" 						**
**																		**
**	Sorties : int --> si -1=Erreur // si 0-OK							**
**									                                    **
**									                                    **
**************************************************************************/
int InitPartie_InitPartie(FIFO_PAQUET *table, FIFO_PAQUET *J1, FIFO_PAQUET *J2, FIFO_PAQUET *J3, FIFO_PAQUET *J4);

/*************************************************************************
**  InitPartie_Free_Carte			                		    		**
**  Description de la fonction	:free toutes les 
	paquets de cartes 													**
**																		**
**	Entrees : FIFO_PAQUET --> FIFO du paquet "table" 					**
**			  FIFO_PAQUET --> FIFO du paquet "J1" 	
			  FIFO_PAQUET --> FIFO du paquet "J2" 
			  FIFO_PAQUET --> FIFO du paquet "J3" 
			  FIFO_PAQUET --> FIFO du paquet "J4" 						**
**																		**
**	Sorties : int --> si -1=Erreur // si 0-OK							**
**									                                    **
**									                                    **
**************************************************************************/
int InitPartie_Free_Carte(FIFO_PAQUET *table, FIFO_PAQUET *J1,FIFO_PAQUET *J2,FIFO_PAQUET *J3,FIFO_PAQUET *J4);

/*************************************************************************
**  InitPartie_Free_Paquet			                		    		**
**  Description de la fonction	:free toutes les 
	cartes d'un paquet 													**
**																		**
**	Entrees : FIFO_PAQUET --> FIFO du paquet "FIFO" 					**
**			  															**
**																		**
**	Sorties : int --> si -1=Erreur // si 0-OK							**
**									                                    **
**									                                    **
**************************************************************************/
int InitPartie_Free_Paquet(FIFO_PAQUET *FIFO);

/*************************************************************************
**  [InitPartie_ConfigurerPartie]                                       **
**  Permet d'editer les faits pour configurer la partie et ses          **
**  parametres (nb IA, niveau de difficulte par exemple)                **
**                                                                      **
**      Entrees : CHAR                                                  **
**                'C' pour configurer                                   **
**                'R' pour reinitialiser                                **
**                                                                      **
**      Sorties : /                                                     **
**                                                                      **
**************************************************************************/
void InitPartie_ConfigurerPartie(char indic);

/*************************************************************************
**  [InitPartie_EditerConfig]                                           **
**  Permet de dupliquer le fichier de faits afin de pouvoir le          **
**  modifier pour configurer la partie (nb IA, difficulte, ...)         **
**                                                                      **
**      Entrees : /                                                     **
**                                                                      **
**      Sorties : INT                                                   **
**                0 = echec                                             **
**                1 = succes                                            **
**                                                                      **
**************************************************************************/
int InitPartie_EditerConfig(void);

/*************************************************************************
**  [InitPartie_ReinitConfigDefaut]                                     **
**  Permet de supprimer le clone du fichier de faits et de remettre     **
**  la config par defaut                                                **
**                                                                      **
**      Entrees : /                                                     **
**                                                                      **
**      Sorties : INT                                                   **
**                0 = echec                                             **
**                1 = succes                                            **
**                                                                      **
**************************************************************************/
int InitPartie_ReinitConfigDefaut(void);

/*************************************************************************
**  [InitPartie_ClonnageFaits]                                          **
**  Permet de cloner le fichier de faits pour modifier la config tout   **
**  en gardant quelquepart (le clone) la config par defaut              **
**                                                                      **
**      Entrees : CHAR                                                  **
**                'C' pour clonner le fichier                           **
**                'S' pour supprimer le clone                           **
**                                                                      **
**      Sorties : INT                                                   **
**                0 = echec                                             **
**                1 = succes                                            **
**                                                                      **
**************************************************************************/
int InitPartie_ClonnageFaits(char indic);

/*************************************************************************
**  [InitPartie_ConfigFailSolver]                                       **
**  Cette fonction est une fonction de secours qui permet en cas d'     **
**  erreur dans la config de pouvoir revenir a un fichier de faits      **
**  correct/pre-configure ou d'en recreer un s'il n'existe pas          **
**                                                                      **
**      Entrees : CHAR                                                  **
**                'C' pour (re)créer un fic. de faits predefini s'il    **
**                    n'existe pas                                      **
**                'R' pour reinitialiser la config par defaut           **
**                                                                      **
**      Sorties : /                                                     **
**                                                                      **
**************************************************************************/
void InitPartie_ConfigFailSolver(char indic);

/*************************************************************************
**  InitPartie_Compte_Joueur			                		    	**
**  Description de la fonction	: Détermine combien de FIFo sont "active"**
**																		**
**	Entrees : 										 					**
**			  FIFO_PAQUET --> FIFO du paquet "J1" 	
			  FIFO_PAQUET --> FIFO du paquet "J2" 
			  FIFO_PAQUET --> FIFO du paquet "J3" 
			  FIFO_PAQUET --> FIFO du paquet "J4" 						**
**																		**
**	Sorties : int --> si -1=Erreur // nombre de joueur ACTIF			**
**									                                    **
**									                                    **
**************************************************************************/
int InitPartie_Compte_Joueur(FIFO_PAQUET *J1,FIFO_PAQUET *J2,FIFO_PAQUET *J3,FIFO_PAQUET *J4);